Этот итератор позволяет сбрасывать и модифицировать значения и ключи в процессе итерации по массивам и объектам.
Когда вы хотите перебрать некоторый массив несколько раз, вы должны создать экземпляр ArrayObject и позволить ему создать экземпляр ArrayIterator, ссылающийся на него при использовании foreach, или при вызове метода getIterator() вручную.
class ArrayCallbackIterator extends ArrayIterator { private $callback; public function __construct($value, $callback) { parent::__construct($value); $this->callback = $callback; } public function current() { $value = parent::current(); return call_user_func($this->callback, $value); } }